﻿using System;
using System.Threading;
using Mono.Collections.Generic;

namespace Mono.Cecil.Cil
{
	// Token: 0x0200013C RID: 316
	public abstract class DebugInformation : ICustomDebugInformationProvider, IMetadataTokenProvider
	{
		// Token: 0x17000310 RID: 784
		// (get) Token: 0x06000BD1 RID: 3025 RVA: 0x00034F7C File Offset: 0x0003317C
		// (set) Token: 0x06000BD2 RID: 3026 RVA: 0x00006354 File Offset: 0x00004554
		public MetadataToken MetadataToken
		{
			get
			{
				return this.token;
			}
			set
			{
				this.token = value;
			}
		}

		// Token: 0x17000311 RID: 785
		// (get) Token: 0x06000BD3 RID: 3027 RVA: 0x00034F94 File Offset: 0x00033194
		public bool HasCustomDebugInformations
		{
			get
			{
				return !this.custom_infos.IsNullOrEmpty<CustomDebugInformation>();
			}
		}

		// Token: 0x17000312 RID: 786
		// (get) Token: 0x06000BD4 RID: 3028 RVA: 0x00034FB4 File Offset: 0x000331B4
		public Collection<CustomDebugInformation> CustomDebugInformations
		{
			get
			{
				bool flag = this.custom_infos == null;
				if (flag)
				{
					Interlocked.CompareExchange<Collection<CustomDebugInformation>>(ref this.custom_infos, new Collection<CustomDebugInformation>(), null);
				}
				return this.custom_infos;
			}
		}

		// Token: 0x06000BD5 RID: 3029 RVA: 0x00002BCC File Offset: 0x00000DCC
		internal DebugInformation()
		{
		}

		// Token: 0x04000748 RID: 1864
		internal MetadataToken token;

		// Token: 0x04000749 RID: 1865
		internal Collection<CustomDebugInformation> custom_infos;
	}
}
